<?php

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

/**
 * Description of final_evaluations_controller
 *
 * @author wilavel
 */
class FinalEvaluationsController extends AppController {

    //put your code here
    var $name = "FinalEvaluations";

    function index() {
        $this->layout = "ajax";
        $this->FinalEvaluation->recursive = 0;

        $proyect_id = $this->Session->read('proy_id');
        $codigo = $this->Session->read('cod');
        $this->set('codigo', $codigo);
        if ($proyect_id == "") {
            $this->Session->setFlash('No ha seleccionado Proyecto', 'flash_custom');
            $this->redirect(array('controller' => 'Pages', 'action' => 'display'));
        } else {
            $this->set('proyect_id', $proyect_id);
            $this->set('evaluaciones', $this->FinalEvaluation->find('all', array('conditions' => array('FinalEvaluation.proyect_id' => $proyect_id), 'fields' => array('FinalEvaluation.id', 'FinalEvaluation.calificacion_elegibilidad_integral', 'User.username', 'User.nombre', 'User.primer_apellido', 'User.segundo_apellido', 'Proyect.codigo'), 'order' => array('FinalEvaluation.id DESC'))));
        }
    }

    function add($proyect_id) {
        $this->set('proyect_id', $proyect_id);
        //Se carga la informacion de la evaluacion anterior
        $this->FinalEvaluation->recursive = -1;
        $this->data = $this->FinalEvaluation->find('first', array('conditions' => array('FinalEvaluation.proyect_id' => $proyect_id), 'order' => array('FinalEvaluation.id DESC')));

        $this->data['FinalEvaluation']['user_id'] = $this->Auth->user('id');
        $this->data['FinalEvaluation']['proyect_id'] = $proyect_id;

        //si existe una evaluacion anterior

        if (!empty($this->data['FinalEvaluation']['id']))
            $anterior_id = $this->data['FinalEvaluation']['id'];

        unset($this->data['FinalEvaluation']['id']);

        //Creamos un objeto predio para poder obtener el ultimo avaluo de cada predio.

        App::Import('model', 'Property');
        $property = new Property();
        $property->recursive = -1;
        $predios = $property->find('all', array('conditions' => array('Property.proyect_id' => $proyect_id), 'fields' => array('Property.id')));

        //verifico que cada predio tenga al menos un avaluo y un plano topografico.
        $crearEvaluacionFinal = true;
//        Esta variable se utilizara para saber si se permite o no la creacion de una evaluacion inicial
        foreach ($predios as $predio) {
            //busco el ultimo avaluo por cada predio y lo agrego a la tabla initial_evaluation_annexes
            App::Import('model', 'EvaluationAppraisals');
            $avaluo = new EvaluationAppraisal();
            //Cuento cuantos avaluos tiene el predio
            $cantidadAvaluos = $avaluo->find('count', array('conditions' => array('EvaluationAppraisal.property_id' => $predio['Property']['id'])));

            //Cuento cuantos planos topograficos tiene el predio
            App::Import('model', 'TopographicMap');
            $planoTopografico = new TopographicMap();
            //buscar el ultimo plano topografico del predio
            $cantidadPlanos = $planoTopografico->find('count', array('conditions' => array('TopographicMap.property_id' => $predio['Property']['id'])));

            if ($cantidadAvaluos < 1 or $cantidadPlanos < 1) {
                $crearEvaluacionFinal = false;
            }
        }


        if ($crearEvaluacionFinal) {
            if ($this->FinalEvaluation->saveAll($this->data)) {
                $last_id = $this->FinalEvaluation->getInsertID();
                if (!empty($anterior_id)) {
                    // Buscamos las lineas producticvas de la  anterior evaluacion
                    $this->FinalEvaluation->FinalProductiveLine->recursive = -1;
                    $lineas = $this->FinalEvaluation->FinalProductiveLine->find('all', array('conditions' => array('FinalProductiveLine.final_evaluation_id' => $anterior_id)));
                    foreach ($lineas as $linea) {
                        $this->FinalEvaluation->FinalProductiveLine->create();
                        unset($linea['FinalProductiveLine']['id']);
                        $linea['FinalProductiveLine']['final_evaluation_id'] = $last_id;
                        $this->FinalEvaluation->FinalProductiveLine->save($linea);
                    }

                    // Buscamos las preguntas de aspectos sociales ,financieros etc  de la  anterior evaluacion
                    $this->FinalEvaluation->FinalEvaluationAnswer->recursive = -1;
                    $respuestas = $this->FinalEvaluation->FinalEvaluationAnswer->find('all', array('conditions' => array('FinalEvaluationAnswer.final_evaluation_id' => $anterior_id)));
                    foreach ($respuestas as $respuesta) {
                        $this->FinalEvaluation->FinalEvaluationAnswer->create();
                        unset($respuesta['FinalEvaluationAnswer']['id']);
                        $respuesta['FinalEvaluationAnswer']['final_evaluation_id'] = $last_id;
                        $this->FinalEvaluation->FinalEvaluationAnswer->save($respuesta);
                    }
                    // Buscamos las contrapartidas de la anterior evaluacion
                    $this->FinalEvaluation->Counterpart->recursive = -1;
                    $contrapartidas = $this->FinalEvaluation->Counterpart->find('all', array('conditions' => array('Counterpart.final_evaluation_id' => $anterior_id)));
                    foreach ($contrapartidas as $contrapartida) {
                        $this->FinalEvaluation->Counterpart->create();
                        unset($contrapartida['Counterpart']['id']);
                        $contrapartida['Counterpart']['final_evaluation_id'] = $last_id;
                        $this->FinalEvaluation->Counterpart->save($contrapartida);
                    }
                    // Buscamos los condicionamientos de la anterior evaluacion
                    $this->FinalEvaluation->EvaluationConstraint->recursive = -1;
                    $condicionamientos = $this->FinalEvaluation->EvaluationConstraint->find('all', array('conditions' => array('EvaluationConstraint.final_evaluation_id' => $anterior_id)));
                    foreach ($condicionamientos as $condicionamiento) {
                        $this->FinalEvaluation->EvaluationConstraint->create();
                        unset($condicionamiento['EvaluationConstraint']['id']);
                        $condicionamiento['EvaluationConstraint']['final_evaluation_id'] = $last_id;
                        $this->FinalEvaluation->EvaluationConstraint->save($condicionamiento);
                    }
                }

                //En este for se asocian las evaluaciones  iniciales con cada avaluo hecho
                foreach ($predios as $predio) {
                    $avaluo = $property->EvaluationAppraisal->find('first', array('conditions' => array('EvaluationAppraisal.property_id' => $predio['Property']['id']), 'order' => array('EvaluationAppraisal.id DESC')));
                    $plano = $property->TopographicMap->find('first', array('conditions' => array('TopographicMap.property_id' => $predio['Property']['id']), 'order' => array('TopographicMap.id DESC')));
                    if (!empty($avaluo['EvaluationAppraisal']['id'])) {
                        $datos = array();
                        $datos['FinalEvaluationAnnex']['final_evaluation_id'] = $last_id;
                        $datos['FinalEvaluationAnnex']['evaluation_appraisal_id'] = $avaluo['EvaluationAppraisal']['id'];
                        $datos['FinalEvaluationAnnex']['topographic_map_id'] = $plano['TopographicMap']['id'];
                        $this->FinalEvaluation->FinalEvaluationAnnex->create();
                        if ($this->FinalEvaluation->FinalEvaluationAnnex->save($datos)) {
                            $this->Session->setFlash('Faltan registros en avalúos o plano topográfico', 'flash_custom');
                        }
                    }
                }

                $this->Session->setFlash('Registro creado exitosamente', 'flash_custom');
                $this->redirect(array('controller' => 'FinalEvaluations', 'action' => 'index'));
            }
        } else {
            $this->Session->setFlash('Para poder crear una evaluación final se debe crear antes un plano topográfico y un avalúo por cada predio del proyecto.');
            $this->redirect(array('controller' => 'Pages', 'action' => 'display'));
        }
    }

    function edit($final_evaluation_id, $proyect_id) {
        $this->set('usuario', $this->Auth->user());
        $this->set('proyect_id', $proyect_id);
        $this->set('final_evaluation_id', $final_evaluation_id);

        //obtenemos datos de convocatorias 
        $options['joins'] = array(
            array(
                'table' => 'calls',
                'alias' => 'Call',
                'type' => 'left',
                'conditions' => array('Proyect.call_id=Call.id')
            ),
            array(
                'table' => 'proposers',
                'alias' => 'Proposer',
                'type' => 'left',
                'conditions' => array('Proyect.id=Proposer.proyect_id')
            )
        );
        $options['fields'] = array('Call.*', 'Proyect.predio_valor', 'Proposer.nombre', 'Proposer.direccion', 'Proposer.telefono_fijo', 'Proposer.telefono_celular', 'Proposer.numero_identificacion', 'Proposer.rep_nombres', 'Proposer.rep_cedula', 'Proposer.rep_apellidos');
        $options['conditions'] = array('Proyect.id' => $proyect_id);
        $this->FinalEvaluation->Proyect->recursive = -1;
        $convocatoria = $this->FinalEvaluation->Proyect->find('first', $options);

        if (empty($this->data)) {
            $codigo = $this->FinalEvaluation->Proyect->field('codigo', array('Proyect.id' => $proyect_id));

            $rutaMuf = APP . "webroot" . "/" . "files" . "/" . $codigo . "/" . 'Muf-' . $codigo . "-" . $final_evaluation_id;
            if (file_exists($rutaMuf . ".xls")) {
                $this->set("rutaMuf", "files" . "/" . $codigo . "/" . 'Muf-' . $codigo . "-" . $final_evaluation_id . ".xls");
            } elseif (file_exists($rutaMuf . "xlsx")) {
                $this->set("rutaMuf", "files" . "/" . $codigo . "/" . 'Muf-' . $codigo . "-" . $final_evaluation_id . ".xlsx");
            }
            $this->set('convocatoria', $convocatoria);
            //Obtenemos las suma del area de planos y del  valor del avaluo
            $area_plano = 0;
            $valor_predios = 0;
            $valor_negociacion = 0;
            $this->FinalEvaluation->Proyect->Property->recursive = -1;
            $predios = $this->FinalEvaluation->Proyect->Property->find('all', array('conditions' => array('Property.proyect_id' => $proyect_id), 'fields' => array('Property.id', 'Property.valor_negociacion')));
            //$this->FinalEvaluation->Proyect->Property->TopographicMap->recursive = -1;
            foreach ($predios as $predio) {

                $this->FinalEvaluation->Proyect->Property->recursive = -1;

                $options = array();
                $options['joins'] = array(
                    array(
                        'table' => 'topographic_maps',
                        'type' => 'left',
                        'alias' => 'TopographicMap',
                        'conditions' => array('TopographicMap.property_id=Property.id')
                    ),
                    array(
                        'table' => 'final_evaluation_annexes',
                        'type' => 'left',
                        'alias' => 'FinalEvaluationAnnexes',
                        'conditions' => array('TopographicMap.id=FinalEvaluationAnnexes.topographic_map_id')
                    ),
                );
                $options['conditions'] = array('FinalEvaluationAnnexes.final_evaluation_id' => $final_evaluation_id, 'Property_id' => $predio['Property']['id']);
                $options['fields'] = array('TopographicMap.area');
                $area = $this->FinalEvaluation->Proyect->Property->find('first', $options);
                //Se busca el valor del avaluo relacionado con la evaluacion final
                $options = array();
                $options['joins'] = array(
                    array(
                        'table' => 'evaluation_appraisals',
                        'type' => 'left',
                        'alias' => 'EvaluationAppraisal',
                        'conditions' => array('EvaluationAppraisal.property_id=Property.id')
                    ),
                    array(
                        'table' => 'final_evaluation_annexes',
                        'type' => 'left',
                        'alias' => 'FinalEvaluationAnnexes',
                        'conditions' => array('EvaluationAppraisal.id=FinalEvaluationAnnexes.evaluation_appraisal_id')
                    ),
                );
                $options['conditions'] = array('FinalEvaluationAnnexes.final_evaluation_id' => $final_evaluation_id, 'Property_id' => $predio['Property']['id']);
                $options['fields'] = array('EvaluationAppraisal.valor');
                $valor = $this->FinalEvaluation->Proyect->Property->find('first', $options);

                $area_plano+=$area['TopographicMap']['area'];
                $valor_predios+=$valor['EvaluationAppraisal']['valor'];
                $valor_negociacion = $predio['Property']['valor_negociacion'];
            }
            if (( $convocatoria['Proyect']['predio_valor'] != 0)) {
                $this->set('valor_negociacion', $convocatoria['Proyect']['predio_valor']);
            } else {
                $this->set('valor_negociacion', $valor_negociacion);
            }

            $this->set('area_plano', $area_plano);
            $this->set('valor_predios', $valor_predios);

            //Obtenemos la suma de las contrapartidas
            $this->FinalEvaluation->Counterpart->recursive = 1;
            $this->set('final_evaluation_id', $final_evaluation_id);
            $this->set('contrapartida_proyecto', $this->FinalEvaluation->Counterpart->field('sum(Counterpart.valor)', array('Counterpart.final_evaluation_id' => $final_evaluation_id, 'Counterpart.clase' => 'Proyecto')));
            $this->set('contrapartida_predios', $this->FinalEvaluation->Counterpart->field('sum(Counterpart.valor)', array('Counterpart.final_evaluation_id' => $final_evaluation_id, 'Counterpart.clase' => 'Predio')));

            $this->data = $this->FinalEvaluation->find('first', array('conditions' => array('FinalEvaluation.id' => $final_evaluation_id)));

            //DATOS DE LAS FAMILIAS INSCRITAS 
            $this->FinalEvaluation->Proyect->Candidate->recursive = -1;
            $principales = $this->FinalEvaluation->Proyect->Candidate->find('count', array('conditions' => array('Candidate.proyect_id' => $this->data['FinalEvaluation']['proyect_id'], 'Candidate.candidate_id' => 0, 'Candidate.clase' => 1, 'Candidate.estado_filtro' => array(1, 5, 6))));
            $suplentes = $this->FinalEvaluation->Proyect->Candidate->find('count', array('conditions' => array('Candidate.proyect_id' => $this->data['FinalEvaluation']['proyect_id'], 'Candidate.candidate_id' => 0, 'Candidate.clase' => 2, 'Candidate.estado_filtro' => array(1, 5, 6))));
            $inscritas = $this->FinalEvaluation->Proyect->Candidate->find('count', array('conditions' => array('Candidate.proyect_id' => $this->data['FinalEvaluation']['proyect_id'], 'Candidate.candidate_id' => 0)));
            $this->set('principales', $principales);
            $this->set('suplentes', $suplentes);
            $this->set('inscritas', $inscritas);
        } else {


            if (isset($this->data['FinalEvaluation']['familias_habilitadas'])) {
                if ($this->data['FinalEvaluation']['familias_habilitadas'] != 0) {
                    $subsido_maximo_predios = $convocatoria['Call']['smmv_predios'] * $convocatoria['Call']['valor_smmv'] * $this->data['FinalEvaluation']['familias_habilitadas'];
                    $subsido_maximo_proyecto = $convocatoria['Call']['smmv_proyecto'] * $convocatoria['Call']['valor_smmv'] * $this->data['FinalEvaluation']['familias_habilitadas'];

                    if ($subsido_maximo_proyecto <= $this->data['FinalEvaluation']['subsidio_proyecto_propuesto']) {
                        $this->data['FinalEvaluation']['subsidio_proyecto_real'] = $subsido_maximo_proyecto;
                    } else {
                        $this->data['FinalEvaluation']['subsidio_proyecto_real'] = $this->data['FinalEvaluation']['subsidio_proyecto_propuesto'];
                    }

                    //buscamos el valor menor entre avaluo,negociacion y el propuesto en el proyecto productivo 
                    $minimo = 0;
                    $minimo = $subsido_maximo_predios;
                    if ($this->data['FinalEvaluation']['subsidio_predios_propuesto'] <= $minimo) {
                        $minimo = $this->data['FinalEvaluation']['subsidio_predios_propuesto'];
                    } if ($this->data['FinalEvaluation']['valor_avaluo'] <= $minimo) {
                        $minimo = $this->data['FinalEvaluation']['valor_avaluo'];
                    } if ($this->data['FinalEvaluation']['valor_negociacion'] <= $minimo) {
                        $minimo = $this->data['FinalEvaluation']['valor_negociacion'];
                    }

                    $this->data['FinalEvaluation']['subsidio_predios_real'] = $minimo;
                }
            }

            if ($this->FinalEvaluation->save($this->data)) {
                $this->Session->setFlash('Registro editado exitosamente', 'flash_custom');
                $this->redirect(array('controller' => 'FinalEvaluations', 'action' => 'edit', $final_evaluation_id, $proyect_id));
            }
        }
    }

    function delete($id) {
        if ($this->FinalEvaluation->delete($id, true)) {
            $this->Session->setFlash('Registro borrado exitosamente', 'flash_custom');
            $this->redirect(array('controller' => 'FinalEvaluations', 'action' => 'index'));
        }
    }

    function print_letter($final_evaluation_id) {
        $this->layout = 'pdf';
        $this->FinalEvaluation->recursive = 0;
        $this->set('final_evaluation_id', $final_evaluation_id);
        $evaluacion = $this->FinalEvaluation->find('first', array('conditions' => array('FinalEvaluation.id' => $final_evaluation_id), 'fields' => array('FinalEvaluation.*', 'User.nombre', 'User.primer_apellido', 'User.segundo_apellido')));
        $this->FinalEvaluation->Proyect->recursive = -1;
        $proyecto = $this->FinalEvaluation->Proyect->find('first', array(
            'conditions' => array(
                'Proyect.id' => $evaluacion['FinalEvaluation']['proyect_id']
            ),
            'joins' => array(
                array('table' => 'calls', 'type' => 'left', 'alias' => 'Call', 'conditions' => array('Call.id=Proyect.call_id')),
                array('table' => 'departaments', 'type' => 'left', 'alias' => 'Departament', 'conditions' => array('Departament.id=Proyect.departament_id')),
            ),
            'fields' => array('Proyect.codigo', 'Proyect.id', 'Call.nombre', 'Departament.name')));
        $this->FinalEvaluation->Proyect->Proposer->recursive = -1;
        $proponente = $this->FinalEvaluation->Proyect->Proposer->find('first', array(
            'conditions' => array(
                'Proposer.proyect_id' => $evaluacion['FinalEvaluation']['proyect_id']
            ),
            'joins' => array(
                array('table' => 'cities', 'type' => 'left', 'alias' => 'City', 'conditions' => array('City.id=Proposer.city_id')),
                array('table' => 'departaments', 'type' => 'left', 'alias' => 'Departament', 'conditions' => array('Departament.id=City.departament_id')),
            ),
            'fields' => array('Proposer.*', 'City.name', 'Departament.name')));
        $this->FinalEvaluation->Proyect->Property->recursive = -1;
        $predios = $this->FinalEvaluation->Proyect->Property->find('all', array(
            'conditions' => array(
                'Property.proyect_id' => $evaluacion['FinalEvaluation']['proyect_id']
            ),
            'joins' => array(
                array('table' => 'cities', 'type' => 'left', 'alias' => 'City', 'conditions' => array('City.id=Property.city_id')),
                array('table' => 'departaments', 'type' => 'left', 'alias' => 'Departament', 'conditions' => array('Departament.id=City.departament_id')),
            ),
            'fields' => array('Property.codigo', 'Property.codigo', 'Property.codigo', 'Property.nombre', 'Property.vereda', 'Property.codigo', 'Property.matricula', 'Property.area_titulo', 'Property.id', 'City.name', 'Departament.name')));
        //condicionamientos Juridicos
        $this->FinalEvaluation->EvaluationConstraint->recursive = 1;
        $this->set('juridicos', $this->FinalEvaluation->EvaluationConstraint->find('all', array('conditions' => array('EvaluationConstraint.final_evaluation_id' => $final_evaluation_id, 'Constraint.tipo' => 'Juridico'), 'fields' => array('EvaluationConstraint.id', 'EvaluationConstraint.descripcion', 'Constraint.nombre'))));
        $this->set('condicionamientos', $this->FinalEvaluation->EvaluationConstraint->find('all', array('conditions' => array('EvaluationConstraint.final_evaluation_id' => $final_evaluation_id, 'Constraint.tipo' => 'Proyecto'), 'fields' => array('EvaluationConstraint.id', 'EvaluationConstraint.descripcion', 'Constraint.nombre'))));
        //DATOS DE LAS FAMILIAS INSCRITAS 
        $this->FinalEvaluation->Proyect->Candidate->recursive = -1;
        $principales = $this->FinalEvaluation->Proyect->Candidate->find('count', array('conditions' => array('Candidate.proyect_id' => $evaluacion['FinalEvaluation']['proyect_id'], 'Candidate.candidate_id' => 0, 'Candidate.clase' => 1)));
        $suplentes = $this->FinalEvaluation->Proyect->Candidate->find('count', array('conditions' => array('Candidate.proyect_id' => $evaluacion['FinalEvaluation']['proyect_id'], 'Candidate.candidate_id' => 0, 'Candidate.clase' => 2)));
        $habilitadas = $this->FinalEvaluation->Proyect->Candidate->find('count', array('conditions' => array('Candidate.proyect_id' => $evaluacion['FinalEvaluation']['proyect_id'], 'Candidate.estado_filtro' => array(1, 5, 6), 'Candidate.candidate_id' => 0)));
        $this->set('principales', $principales);
        $this->set('suplentes', $suplentes);
        $this->set('habilitadas', $habilitadas);
        ///DATOS DE LAS CONTRAPARTIDAS
        $this->set("contapartidas_certificadas_predio", $this->FinalEvaluation->Counterpart->field('sum(valor)', array('Counterpart.tipo' => 'Certificada', 'Counterpart.clase' => 'Predio', 'Counterpart.final_evaluation_id' => $final_evaluation_id)));
        $this->set("contapartidas_otra_predio", $this->FinalEvaluation->Counterpart->field('sum(valor)', array('Counterpart.tipo' => 'Otra', 'Counterpart.clase' => 'Predio', 'Counterpart.final_evaluation_id' => $final_evaluation_id)));
        $this->set("contapartidas_certificadas_proyecto", $this->FinalEvaluation->Counterpart->field('sum(valor)', array('Counterpart.tipo' => 'Certificada', 'Counterpart.clase' => 'Proyecto', 'Counterpart.final_evaluation_id' => $final_evaluation_id)));
        $this->set("contapartidas_otra_proyecto", $this->FinalEvaluation->Counterpart->field('sum(valor)', array('Counterpart.tipo' => 'Otra', 'Counterpart.clase' => 'Proyecto', 'Counterpart.final_evaluation_id' => $final_evaluation_id)));
        //DATOS DE LA ENCUESTA DE FASE II
        $this->FinalEvaluation->Proyect->Poll->recursive = -1;
        $encuesta = $this->FinalEvaluation->Proyect->Poll->find('first', array('conditions' => array('Poll.proyect_id' => $evaluacion['FinalEvaluation']['proyect_id']), 'fields' => array('Poll.id', 'Poll.calificacion_caracteristicas_biofisicas', 'Poll.calificacion_sociales', 'Poll.calificacion_economicos', 'Poll.calificacion_ambientales', 'Poll.visto_bueno', 'Poll.verificacion_fase_uno')));
        $calificacion_encuesta = "Cumple";
        if ($encuesta['Poll']['calificacion_caracteristicas_biofisicas'] != "CUMPLE" || $encuesta['Poll']['calificacion_sociales'] != "CUMPLE" || $encuesta['Poll']['calificacion_economicos'] != "CUMPLE" || $encuesta['Poll']['calificacion_ambientales'] != "CUMPLE" || $encuesta['Poll']['visto_bueno'] != "Si" || $encuesta['Poll']['verificacion_fase_uno'] != "Si") {
            $calificacion_encuesta = "No cumple";
        }

        $this->set('proyecto', $proyecto);
        $this->set('calificacion_encuesta', $calificacion_encuesta);
        $this->set('proponente', $proponente);
        $this->set('predios', $predios);
        $this->set('evaluacion', $evaluacion);
    }

    function upload($evaluation_id, $proyect_id) {
        $this->set('evaluation_id', $evaluation_id);
        $this->set('proyect_id', $proyect_id);
        $this->FinalEvaluation->Proyect->recursive = -1;
        $codigo = $this->FinalEvaluation->Proyect->field('codigo', array('Proyect.id' => $proyect_id));

        if (!empty($this->data)) {
            if (stristr($this->data['FinalEvaluation']['archivo']['name'], "xls") || stristr($this->data['FinalEvaluation']['archivo']['name'], "xlsx")) {
                $rutaArchivo = APP . "webroot" . DS . "files" . DS . $codigo;
                if (!is_dir($rutaArchivo)) {
                    if (!mkdir($rutaArchivo)) {
                        echo "error creando archivo";
                        //redirect
                    }
                }

                if (stristr($this->data['FinalEvaluation']['archivo']['name'], "xls")) {
                    $rutaArchivo.= DS . "Muf-$codigo" . "-" . "$evaluation_id.xls";
                } else {
                    $rutaArchivo.= DS . "Muf-$codigo" . "-" . "$evaluation_id.xlsx";
                }

                if (move_uploaded_file($this->data['FinalEvaluation']['archivo']['tmp_name'], $rutaArchivo)) {
                    $this->Session->setFlash('El archivo fue subido corrrectamente');
                    $this->redirect(array('controller' => 'Pages', 'action' => 'display'));
                }
            } else {
                $this->Session->setFlash('Solo se permiten archivos de excel');
            }
        }
    }

    function report() {
        App::Import('model', 'EvaluationConstraint');
        App::Import('model', 'QualityControl');
        App::Import('model', 'Property');
        App::Import('Model', 'Poll');
        App::Import('Model', 'Resolution');
        App::Import('model', 'TopographicMap');

        $this->layout = 'csv';
        ini_set('max_execution_time', 600); //increase max_execution_time to 10 min if data set is very large
        date_default_timezone_set("America/Bogota");
        $filename = "Estado_Evaluaciones_Finales_" . date("Y.m.d") . ".csv";
        $csv_file = fopen('php://output', 'w');
        header('Content-type: application/csv');
        header('Content-Disposition: attachment; filename="' . $filename . '"');

        $sql = "SELECT b.evaluado_incoder, b.fecha_publicacion, b.publicado, e.valor_smmv ,a.familias_habilitadas,a.tipo_proyecto, a.subsidio_proyecto_real, a.subsidio_predios_real, a.id, b.id, d.nombre, d.primer_apellido, b.codigo, a.calificacion_anexos, a.calificacion_ubicacion,
            a.calificacion_area_util, a.calificacion_suelos, a.calificacion_claseV, a.calificacion_mejoras_santuarias, a.calificacion_elegibilidad_integral
            FROM `final_evaluations` a
            LEFT JOIN proyects b ON a.proyect_id = b.id
            LEFT JOIN calls e ON e.id = b.call_id
            LEFT JOIN users d ON d.id = a.user_id
            WHERE a.id = ( 
            SELECT MAX( y.id ) AS id
            FROM `final_evaluations` y
            LEFT JOIN proyects x ON x.id = y.proyect_id
            WHERE x.codigo = b.codigo ) 
            GROUP BY b.codigo
            ORDER BY a.id ASC ";

        $results = $this->FinalEvaluation->query($sql);

        // The column headings of your .csv file
        $header_row = array(
            "NOMBRE",
            "PRIMER APELLIDO",
            "CODIGO",
            "ÁREA AVALÚO",
            "CALIFICACIÓN ANEXOS",
            "CALIFICACIÓN UBICACIÓN",
            "CALIFICACIÓN ÁREA ÚTIL",
            "CALIFICACIÓN SUELOS",
            "CALIFICACIÓN CLASE AGROLOGICA V",
            "CALIFICACION MEJORAS SUNTUARIAS",
            "CALIFICACIÓN ASPECTOS PRODUCTIVOS",
            "CALIFICACIÓN ASPECTOS SOCIALES",
            "CALIFICACIÓN ASPECTOS FINANCIEROS",
            "CALIFICACIÓN ASPECTOS AMBIENTALES",
            "TIENE CONDICIONAMIENTOS",
            "HIPOTECA",
            "AFECTACIÓN A VIVIENDA FAMILIAR",
            "DECLARATORIA DE ZONA DE DESPLAZAMIENTO FORZADO",
            "AREA EN TITULOS",
            "NEGOCIACIÓN",
            "CABIDA FAMILIAR",
            "CALIFICACION ELEGIBILIDAD (CALCULADO)",
            "CALIFICACION ELEGIBILIDAD INTEGRAL (EVALUADOR)",
            "CONTROL CALIDAD ESTUDIOS DE TITULOS",
            "CONTROL CALIDAD ESTUDIOS DE TITULOS TEXTO",
            "CALIFICACIÓN AVALUOS",
            "CALIFICACIÓN ENCUESTA",
            "SUBSIDIO PROYECTO",
            "SUBSIDIO PREDIO",
            "NÚMERO FAMILIAS HABILITADAS",
            "SUBSIDIO NOTARIAL",
            "VIABILIDAD INTEGRAL",
            "PUBLICADO",
            "FECHA PUBLICACIÓN",
            "TIPO PROYECTO",
            "ESTADO LEVANTAMIENTOS",
            "REVISIÓN DE PREDIOS FASE III",
            "EVALUADO INCODER",
            "NÚMERO RESOLUCIÓN",
            "FECHA RESOLUCIÓN"
        );
        fputcsv($csv_file, $header_row, ';', '"');

        $constraints = new EvaluationConstraint();
        $constraints->recursive = -1;
        $properties = new Property();
        $properties->recursive = -1;
        $qualityControls = new QualityControl();
        $qualityControls->recursive = -1;
        $planoTopografico = new TopographicMap();
        $planoTopografico->recursive = -1;


        foreach ($results as $result) {
            $calificacionFinalControlCalidad = "";
            //se buscan los condicionamientos que pertenezcan a la evaluación
            $condicionamientos = $constraints->find('all', array('conditions' => array('EvaluationConstraint.final_evaluation_id' => $result['a']['id']), 'order' => array('EvaluationConstraint.id ASC')));
            //se buscan los predios que pertenecen al proyecto
            $propiedades = $properties->find('all', array('conditions' => array('Property.proyect_id' => $result['b']['id']), 'fields' => array('Property.id', 'Property.codigo')));

            $revisionPredios = "Cumple";
            //Revision de predios
            foreach ($propiedades as $predio) {
                //Revision final de predios
                $rpredios = $properties->PropertyFinalReview->find('first', array('conditions' => array('PropertyFinalReview.property_id' => $predio['Property']['id']), 'order' => array('PropertyFinalReview.id DESC'), 'fields' => array('PropertyFinalReview.calificacion')));


                if (empty($rpredios)) {

                    $revisionPredios = "Sin registro";
                } else {

                    if ($rpredios['PropertyFinalReview']['calificacion'] == "Sin registro") {
                        $revisionPredios = "Sin registro";
                    }
                    if ($rpredios['PropertyFinalReview']['calificacion'] == "No cumple") {
                        $revisionPredios = "No cumple";
                    }
                }
            }


            $textoControlCalidad = "";
            foreach ($propiedades as $propiedad) {
                //Busco el ultimo control de calidad que tenga este predio.
                $controlCalidad = $qualityControls->find('first', array('conditions' => array('QualityControl.property_id' => $propiedad['Property']['id']), 'order' => array('QualityControl.id DESC'), 'fields' => array('QualityControl.calificacion')));
                switch ($controlCalidad['QualityControl']['calificacion']) {
                    case 1:
                        $calificacionControlCalidad = "PENDIENTE";
                        if ($calificacionFinalControlCalidad == "" or $calificacionFinalControlCalidad == "CUMPLE")
                            $calificacionFinalControlCalidad = "PENDIENTE";
                        break;
                    case 2:
                        $calificacionControlCalidad = "REQUIERE DOCUMENTO";
                        if ($calificacionFinalControlCalidad == "" or $calificacionFinalControlCalidad == "CUMPLE")
                            $calificacionFinalControlCalidad = "PENDIENTE";
                        break;
                    case 3:
                        $calificacionControlCalidad = "NO CUMPLE";
                        $calificacionFinalControlCalidad = "NO CUMPLE";
                        break;
                    case 4:
                        $calificacionControlCalidad = "CUMPLE";
                        if ($calificacionFinalControlCalidad == "" or $calificacionFinalControlCalidad == "CUMPLE")
                            $calificacionFinalControlCalidad = "CUMPLE";
                        break;
                    default:
                        $calificacionControlCalidad = "NO HA SIDO REVISADO";
                        if ($calificacionFinalControlCalidad == "" or $calificacionFinalControlCalidad == "CUMPLE")
                            $calificacionFinalControlCalidad = "PENDIENTE";
                        break;
                }
                $textoControlCalidad .= "El predio con el codigo " . $propiedad['Property']['codigo'] . " Tiene como calificación " . $calificacionControlCalidad . " ";
            }

            $condicionamiento_hipoteca = "";
            $condicionamiento_afectacion = "";
            $condicionamiento_declaratoria = "";
            $condicionamiento_area = "";
            $condicionamiento_negociacion = "";
            $condicionamiento_cabida = "";
            if (!empty($condicionamientos)) {
                $levantados = "LEVANTADO";
            } else {
                $levantados = "SIN CONDICIONAMIENTOS";
            }

            foreach ($condicionamientos as $condicionamiento) {
                if ($condicionamiento['EvaluationConstraint']['calificacion'] == 'Sin registro' || $condicionamiento['EvaluationConstraint']['calificacion'] == '') {
                    $levantados = "Sin registro";
                }
                if ($condicionamiento['EvaluationConstraint']['calificacion'] == 'NO LEVANTADO') {
                    $levantados = "NO LEVANTADO";
                    break;
                }
            }

            foreach ($condicionamientos as $condicionamiento) {

                switch ($condicionamiento['EvaluationConstraint']['constraint_id']) {
                    case 1:
                        $condicionamiento_hipoteca = $condicionamiento['EvaluationConstraint']['descripcion'];
                        break;
                    case 2:
                        $condicionamiento_afectacion = $condicionamiento['EvaluationConstraint']['descripcion'];
                        break;
                    case 3:
                        $condicionamiento_declaratoria = $condicionamiento['EvaluationConstraint']['descripcion'];
                        break;
                    case 4:
                        $condicionamiento_area = $condicionamiento['EvaluationConstraint']['descripcion'];
                        break;
                    case 5:
                        $condicionamiento_negociacion = $condicionamiento['EvaluationConstraint']['descripcion'];
                        break;
                    case 6:
                        $condicionamiento_cabida = $condicionamiento['EvaluationConstraint']['descripcion'];
                        break;
                }
            }

            $elegibilidad = "";

            if ($result['a']['calificacion_anexos'] == 'Cumple' and $result['a']['calificacion_ubicacion'] == 'Cumple' and $result['a']['calificacion_area_util'] == 'Cumple'
                    and $result['a']['calificacion_suelos'] == 'Cumple' and $result['a']['calificacion_claseV'] == 'Cumple' and $result['a']['calificacion_mejoras_santuarias'] == 'Cumple') {
                $elegibilidad = "Cumple";
            } else {
                $elegibilidad = "No cumple";
            }

            $tieneCondicionamientos = "No";
            if ($condicionamiento_area != "" or $condicionamiento_negociacion != "" or $condicionamiento_cabida != ""
                    or $condicionamiento_hipoteca != "" or $condicionamiento_afectacion != "" or $condicionamiento_declaratoria != ""
            ) {
                $tieneCondicionamientos = "Si";
            }
            $property = new Property();
            $property->recursive = -1;
            $predios = $property->find('all', array('conditions' => array('Property.proyect_id' => $result['b']['id']), 'fields' => array('Property.id')));

            //traemos los datos de la resolucion de cada proyecto.
            $resolution = new Resolution();
            $numero_resolucion = $resolution->field('Resolution.numero', array('Resolution.final_evaluation_id' => $result['a']['id']), 'Resolution.id DESC');
            $fecha_resolucion = $resolution->field('Resolution.fecha', array('Resolution.final_evaluation_id' => $result['a']['id']), 'Resolution.id DESC');


            $calificacion_avaluos = "Cumple";

            $areaTotalPlanosTopograficos = 0;
            foreach ($predios as $predio) {

                $options = array();
                $options['joins'] = array(
                    array(
                        'table' => 'evaluation_appraisals',
                        'type' => 'left',
                        'alias' => 'EvaluationAppraisal',
                        'conditions' => array('EvaluationAppraisal.property_id=Property.id')
                    ),
                    array(
                        'table' => 'final_evaluation_annexes',
                        'type' => 'left',
                        'alias' => 'FinalEvaluationAnnexes',
                        'conditions' => array('EvaluationAppraisal.id=FinalEvaluationAnnexes.evaluation_appraisal_id')
                    ),
                );
                $options['conditions'] = array('FinalEvaluationAnnexes.final_evaluation_id' => $result['a']['id'], 'Property_id' => $predio['Property']['id']);
                $options['fields'] = array('EvaluationAppraisal.valor', 'EvaluationAppraisal.area', 'EvaluationAppraisal.calificacion', 'EvaluationAppraisal.concepto');
                $valor = $property->find('first', $options);

                if ($valor['EvaluationAppraisal']['calificacion'] != 1) {
                    $calificacion_avaluos = "No cumple";
                }

                //busco el ultimo plano topografico que tenga el predio, tomo el valor del área y lo sumo al total del proyecto.
                $areaTotalPlanosTopograficos += $planoTopografico->field('TopographicMap.area', array('TopographicMap.property_id' => $predio['Property']['id']), 'id DESC');
            }

            $evaluacion = $this->FinalEvaluation->find('first', array('conditions' => array('FinalEvaluation.id' => $result['a']['id']), 'fields' => array('FinalEvaluation.*')));

            $criterios_evaluacion = "Cumple";
            if ($evaluacion['FinalEvaluation']['calificacion_anexos'] != 'Cumple' || $evaluacion['FinalEvaluation']['calificacion_ubicacion'] != 'Cumple' || $evaluacion['FinalEvaluation']['calificacion_area_util'] != "Cumple" || $evaluacion['FinalEvaluation']['calificacion_suelos'] != "Cumple" || $evaluacion['FinalEvaluation']['calificacion_claseV'] != "Cumple" || $evaluacion['FinalEvaluation']['calificacion_mejoras_santuarias'] != "Cumple") {
                $criterios_evaluacion = "No cumple";
            }

            $calificacion_encuesta = "Cumple";

            $poll = new Poll();
            $poll->recursive = -1;

            $encuesta = $poll->find('first', array('conditions' => array('Poll.proyect_id' => $result['b']['id']), 'fields' => array('Poll.verificacion_fase_uno', 'Poll.visto_bueno', 'Poll.calificacion_caracteristicas_biofisicas', 'Poll.calificacion_sociales', 'Poll.calificacion_economicos', 'Poll.calificacion_ambientales',), 'order' => array('Poll.id DESC')));

            $calificacion_encuesta = '';

            if ($encuesta['Poll']['calificacion_caracteristicas_biofisicas'] == null or $encuesta['Poll']['calificacion_sociales'] == null
                    or $encuesta['Poll']['calificacion_economicos'] == null or $encuesta['Poll']['calificacion_ambientales'] == null or
                    $encuesta['Poll']['calificacion_caracteristicas_biofisicas'] == '' or $encuesta['Poll']['calificacion_sociales'] == ''
                    or $encuesta['Poll']['calificacion_economicos'] == '' or $encuesta['Poll']['calificacion_ambientales'] == ''
            ) {
                $calificacion_encuesta = 'No cumple';
            } else if ($encuesta['Poll']['verificacion_fase_uno'] == null or $encuesta['Poll']['visto_bueno'] == null or
                    $encuesta['Poll']['verificacion_fase_uno'] == 'Sin registro' or $encuesta['Poll']['visto_bueno'] == 'Sin registro') {
                $calificacion_encuesta = 'No cumple';
            } else if ($encuesta['Poll']['calificacion_caracteristicas_biofisicas'] == 'No cumple' or $encuesta['Poll']['calificacion_sociales'] == 'No cumple'
                    or $encuesta['Poll']['calificacion_economicos'] == 'No cumple' or $encuesta['Poll']['calificacion_ambientales'] == 'No cumple' or
                    $encuesta['Poll']['verificacion_fase_uno'] == 'No' or $encuesta['Poll']['visto_bueno'] == null
            ) {
                $calificacion_encuesta = 'No cumple';
            } else {
                $calificacion_encuesta = 'Cumple';
            }

            $viabilidad_integral = "Cumple";

            if ($criterios_evaluacion != "Cumple" || $evaluacion['FinalEvaluation']['calificacion_aspectos_productivos'] != "Cumple" || $calificacion_avaluos != "Cumple" ||
                    $evaluacion['FinalEvaluation']['calificacion_aspectos_sociales'] != "Cumple" || $evaluacion['FinalEvaluation']['calificacion_aspectos_financieros'] != "Cumple" ||
                    $evaluacion['FinalEvaluation']['calificacion_aspectos_ambientales'] != "Cumple" || $evaluacion['FinalEvaluation']['calificacion_elegibilidad_integral'] != "Elegible" ||
                    $calificacionFinalControlCalidad != "CUMPLE" || $calificacion_encuesta != "Cumple") {
                $viabilidad_integral = "No cumple";
            }

            $subsidio_notarial = $result['a']['familias_habilitadas'] * $result['e']['valor_smmv'];

            $publicado = "";
            if ($result['b']['publicado'] == 1) {
                $publicado = "SI";
            } else {
                $publicado = "NO";
            }

            $evaluado_incoder = "";
            if ($result['b']['evaluado_incoder'] == 1) {
                $evaluado_incoder = "SI";
            } else {
                $evaluado_incoder = "NO";
            }
            $row = array(
                $result['d']['nombre'],
                $result['d']['primer_apellido'],
                $result['b']['codigo'],
                number_format($areaTotalPlanosTopograficos, 4, ',', '.'),
                $result['a']['calificacion_anexos'],
                $result['a']['calificacion_ubicacion'],
                $result['a']['calificacion_area_util'],
                $result['a']['calificacion_suelos'],
                $result['a']['calificacion_claseV'],
                $result['a']['calificacion_mejoras_santuarias'],
                $evaluacion['FinalEvaluation']['calificacion_aspectos_productivos'],
                $evaluacion['FinalEvaluation']['calificacion_aspectos_sociales'],
                $evaluacion['FinalEvaluation']['calificacion_aspectos_financieros'],
                $evaluacion['FinalEvaluation']['calificacion_aspectos_ambientales'],
                //¿TIENE CONDICIONAMIENTOS?
                $tieneCondicionamientos,
                //condicionamientos
                $condicionamiento_hipoteca,
                $condicionamiento_afectacion,
                $condicionamiento_declaratoria,
                $condicionamiento_area,
                $condicionamiento_negociacion,
                $condicionamiento_cabida,
                $elegibilidad,
                $result['a']['calificacion_elegibilidad_integral'],
                //controles de calidad a los predios
                $calificacionFinalControlCalidad,
                $textoControlCalidad,
                //los que llevan a viabilidad integral

                $calificacion_avaluos,
                $calificacion_encuesta,
                $result['a']['subsidio_proyecto_real'],
                $result['a']['subsidio_predios_real'],
                $result['a']['familias_habilitadas'],
                $subsidio_notarial,
                $viabilidad_integral,
                $publicado,
                $result['b']['fecha_publicacion'],
                $result['a']['tipo_proyecto'],
                $levantados,
                $revisionPredios,
                $evaluado_incoder,
                $numero_resolucion,
                $fecha_resolucion
            );
            fputcsv($csv_file, $row, ';', '"');
        }

        fclose($csv_file);
    }

}

?>